﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BolsaTrabajo.BusinessEntities;
using BolsaTrabajo.DataAccess;
using System.Transactions;
using System.Data;

namespace BolsaTrabajo.BusinessLogic
{
    public class AvisoTrabajoLogic
    {
        AvisoTrabajoData odata = null;

        public AvisoTrabajoLogic()
        {
            odata = new AvisoTrabajoData();
        }

        public AvisoTrabajo CargarEntidad(Int32 id)
        {
            AvisoTrabajo resultado = null;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.CargarEntidad(id);
                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return resultado;
        }

        public Boolean Registrar(String applicationId, String titulo, DateTime fechaInicioVigencia, DateTime fechaFinVigencia, Int32 idEmpresa, String descripcionPuesto, DateTime fechaPublicacion, String distrito, String salario, Boolean comienzo, String tipoTrabajo, String telefono, String correoElectronico, String idUsuarioCreacion, DateTime fechaCreacion, Boolean idEstado)
        {
            Boolean resultado = true;

            AvisoTrabajo avisotrabajoACrear = new AvisoTrabajo();
            avisotrabajoACrear.ApplicationId = new Guid(applicationId);
            avisotrabajoACrear.Titulo = titulo;
            avisotrabajoACrear.FechaInicioVigencia = fechaInicioVigencia;
            avisotrabajoACrear.FechaFinVigencia = fechaFinVigencia;
            avisotrabajoACrear.IdEmpresa = idEmpresa;
            avisotrabajoACrear.DescripcionPuesto = descripcionPuesto;
            avisotrabajoACrear.FechaPublicacion = fechaPublicacion;
            avisotrabajoACrear.Distrito = distrito;
            avisotrabajoACrear.Salario = salario;
            avisotrabajoACrear.Comienzo = comienzo;
            avisotrabajoACrear.TipoTrabajo = tipoTrabajo;
            avisotrabajoACrear.Telefono = telefono;
            avisotrabajoACrear.CorreoElectronico = correoElectronico;
            avisotrabajoACrear.IdUsuarioCreacion = new Guid(idUsuarioCreacion);
            avisotrabajoACrear.FechaCreacion = fechaCreacion;
            avisotrabajoACrear.IdEstado = idEstado;

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Registrar(avisotrabajoACrear);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Actualizar(AvisoTrabajo item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Actualizar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public Boolean Eliminar(AvisoTrabajo item)
        {
            Boolean resultado = true;
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.Eliminar(item);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                resultado = false;
            }
            return resultado;
        }

        public List<AvisoTrabajo> ListarCabeceraPorCategoria(Int32 idCategoria)
        {
            List<AvisoTrabajo> resultado = new List<AvisoTrabajo>();
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ListarCabeceraPorCategoria(idCategoria);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }

        public List<AvisoTrabajo> ListarDetallePorAvisoTrabajo(Int32 idAvisoTrabajo)
        {
            List<AvisoTrabajo> resultado = new List<AvisoTrabajo>();
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ListarDetallePorAvisoTrabajo(idAvisoTrabajo);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }

        public List<AvisoTrabajo> ListarPorEmpresa(Int32 idEmpresa)
        {
            List<AvisoTrabajo> resultado = new List<AvisoTrabajo>();
            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Suppress))
                {
                    resultado = odata.ListarPorEmpresa(idEmpresa);
                    tx.Complete();
                }
            }
            catch (Exception)
            {

                throw;
            }
            return resultado;
        }
    }
}
